package easyjava.function;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import easyjava.struct.Pair;

/**
 * 对象创建相关方法
 *
 */
public interface CreateFunction {
	
	/**
	 * 对objs进行字符串拼接，objs为空时返回空。
	 */
	static String str(Object... objs) {
        if (objs == null) return null;
        StringBuilder strBuilder = new StringBuilder();
        for (Object obj : objs) {
        	if(obj!=null) {
        		strBuilder.append(String.valueOf(obj));
        	}
        }
        return strBuilder.toString();
    }

	/**
	 * 对正则字符串内反斜杠进行转义，regex为空时返回空。
	 */
    static String re(String regex) {
        if (regex == null) return null;
        return regex.replace("\\", "\\\\");
    }
    
    /**
     * 创建数组,基本类型返回的是包装类型数组（因为泛型只能是包装类型）。
     */
    static <T> T[] array(T... items) {
    	return items;
    }
    
    /**
     * 创建List
     */
    static <T> List<T> createList(T... items){
    	List<T> listObj=new ArrayList<>(items.length);
    	listObj.addAll(Arrays.asList(items));
    	return listObj;
    }
    
    /**
     * 创建Set集合
     */
    static <T> Set<T> createSet(T... items){
    	Set<T> setObj = new HashSet<>(items.length);
    	setObj.addAll(Arrays.asList(items));
    	return setObj;
    }
    
    /**
     * 创建单个键值对
     */
    static Pair pair(String key,Object value) {
		return new Pair(key,value);
	}
    
    /**
     * 创建Map集合
     */
    static <T> Map<String,T> createMap(Pair... pairs) {
    	Map<String,T> map=new HashMap<>(pairs.length);
    	for(Pair pair:pairs) {
    		map.put(pair.getKey(), (T)pair.getValue());
    	}
    	return map;
    	
    }
}
